package com.example.demo.mapper;

import com.example.common.entity.ArticleInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository
@Mapper
public interface ArticleMapper {

    /**
     * 根据用户 id 获取该用户的文章总数
     * @param uid
     * @return
     */
    Integer getArtCountByUid(@Param("uid") Integer uid);

    /**
     * 根据用户 id 获取该用户的所有文章
     * @return
     */
    List<ArticleInfo> getAllArtInfoByUid(@Param("uid") Integer uid);

    /**
     * 通过文章 id 和用户 id 进行删除文章(若文章 id 对应的文章 uid 无法对应，则无法删除博客)
     * @param id
     * @param uid
     * @return
     */
    Integer delArt(@Param("id") Integer id,
                   @Param("uid") Integer uid);

    /**
     * 根据文章 id 获取文章的详情信息
     * @param id
     * @return
     */
    ArticleInfo getArtInfoById(@Param("id") Integer id);

    /**
     * 阅读量 +1
     * @param id
     * @return
     */
    Integer incrRCount(@Param("id") Integer id);

    /**
     * 发布博客
     * @param articleInfo
     * @return
     */
    Integer add(ArticleInfo articleInfo);

    /**
     * 修改文章
     * @param articleInfo
     * @return
     */
    Integer update(ArticleInfo articleInfo);

    /**
     * 博客列表页分页功能
     * @param psize 每页显示的文章个数
     * @param offset 文章下标(偏移量)
     * @return
     */
    List<ArticleInfo> getListByPage(@Param("psize") Integer psize,
                                    @Param("offset") Integer offset);

    /**
     * 获取文章总数
     * @return
     */
    Integer getArtAllCount();

    /**
     * 保存文章
     * @param articleInfo
     * @return
     */
    Integer saveArt(ArticleInfo articleInfo);

    /**
     * 获取草稿列表
     * @param uid
     * @return
     */
    List<ArticleInfo> getMyDraftListByUid(@Param("uid") Integer uid);

    /**
     * 保存草稿(实际上是进行修改)
     * @param articleInfo
     * @return
     */
    Integer saveDraft(ArticleInfo articleInfo);

    /**
     * 通过文章 id 修改点赞数量
     * @param aid
     * @return
     */
    Integer updateLikesByAid(@Param("aid") Integer aid,
                        @Param("likes") Integer likes);

}
